package leetCodeTop100;

import java.util.*;

/**
 *给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
 *
 * 思路：遍历数组，字符串acii加一起值相等的排在一个集合里面,
 *   不对，ACII码相等，但是字符不一样，这里用排序后的字符串作Key。
 *  所以，就用Map去做就行。
 */
public class L_49 {
    public List<List<String>> groupAnagrams(String[] strs) {
        if(strs == null){
            return new ArrayList<>();
        }
        if(strs.length == 1){
            List<List<String>> re = new ArrayList<>();
            re.add(Arrays.asList(strs[0]));
            return re;
        }
        Map<String,List<String>> resultMap = new HashMap<>();
        Arrays.stream(strs).forEach( it -> {
            // 存在就加进去，不存在就创建
            if(resultMap.get(getSortStr(it)) != null){
                resultMap.get(getSortStr(it)).add(it);
            }else {
                List<String> tmp = new ArrayList<>();
                tmp.add(it);
                resultMap.put(getSortStr(it),tmp);
            }
        });
        List<List<String>> result = new ArrayList<>();
        if(resultMap.size()> 0){
            for(String key : resultMap.keySet()){
                result.add(resultMap.get(key));
            }
            return result;
        }
        return result;
    }

    /**
     * 获取排序后的字符串用于区分同一组字符串
     * @param str
     * @return
     */
    private String getSortStr(String str){
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return String.valueOf(chars);
    }

    public static void main(String[] args) {
        String[] strs = new String[]{"eat","tea","tan","ate","nat","bat"};

    }
}
